package com.mmall.concurrency.example.atomic;

import com.mmall.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;

@Slf4j
@ThreadSafe
public class AtomicExample3 {
    public static int clientTotal=5000;
    public static int threadTotal=200;

    public static LongAdder count= new LongAdder();

    public static void main(String[] args) throws Exception{
//        ExecutorService exe= Executors.newCachedThreadPool();
//         final Semaphore semaphore =new Semaphore(threadTotal);
//        final CountDownLatch countDownLatch=new CountDownLatch(clientTotal);
//        for (int i =0;i<clientTotal;i++){
//            exe.execute(()->{
//                try {
//                    semaphore.acquire();
//                    add();
//                    semaphore.release();
//                } catch (Exception e){
//                    log.error("线程异常");
//                }
//                countDownLatch.countDown();
//
//            });
//        }
//        countDownLatch.await();
//        exe.shutdown();
        for(int i=0;i<10;i++){
            add();
        }
        log.info("count:{}",count.longValue());

    }

    private static void add() {
        count.increment();
//        count.getAndIncrement();
    }

}
